package com.example.academic_affairs_system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.example.academic_affairs_system.model.bo.AasClassUserBO;
import com.example.academic_affairs_system.model.dto.classCourses.TimeTableDTO;
import com.example.academic_affairs_system.model.dto.clazz.HandlerClassDTO;
import com.example.academic_affairs_system.model.entity.AasClass;
import com.example.academic_affairs_system.model.vo.clazz.ClassInfoVO;
import com.example.academic_affairs_system.model.vo.clazz.ClassStaticsVO;

import java.util.List;

/**
 * 服务类
 *
 * @author hjx
 * @since 2023-01-31
 */
public interface IAasClassService extends IService<AasClass> {
  /**
   * 根据负责人的用户 id 获取班级信息
   *
   * <p>如果为空，那么就说明，当前用户没有承担班级负责人这一角色
   *
   * @param userId 用户 id
   * @return {@link List} 班级信息
   */
  List<AasClass> getClassByDirectorsId(long userId);

  /**
   * 获取当前用户的班级
   *
   * @return {@link List} 班级信息
   */
  List<AasClass> getClassByCurrentUser();
  /**
   * 根据用户 id 获取班级信息
   *
   * <p>如果为空，那么就说明，当前用户可能不是学生
   *
   * @param userId 用户 id
   * @return {@link AasClass} 班级信息
   */
  AasClass getClassByStudentId(long userId);
  /**
   * 根据学生的用户 id 获取数据交互类
   *
   * @param userId 用户 id
   * @return {@link AasClassUserBO} 用户在班级的信息数据
   */
  AasClassUserBO getClassUserByUserId(long userId);
  /**
   * 根据班级 id 获取班级信息视图对象
   *
   * @param classId 班级 id
   * @return {@link ClassInfoVO} 班级信息视图对象
   */
  ClassInfoVO getClassInfoByClassId(long classId);
  /**
   * 根据班级 id 获取班级信息视图对象
   *
   * @return {@link ClassStaticsVO} 统计信息
   */
  List<ClassStaticsVO> getClassStaticsByDirectorsId();
  /**
   * 新建班级
   *
   * @param dto 创建班级所需要的信息
   * @return {@link Long} 班级 id
   */
  long createClass(HandlerClassDTO dto);
  /**
   * 修改班级信息
   *
   * @param dto 修改班级所需要的信息
   * @return {@link Long} 班级 id
   */
  int edit(HandlerClassDTO dto);

  /**
   * 安排班级课程表
   *
   * @param dto 课程表dto
   * @return {@link Integer} 影响数据行
   */
  int arrangeClassTimetable(TimeTableDTO dto);


}
